【20211115】【Python】Python中列表、矩阵元素相乘及矩阵乘法 您所在的位置:网站首页 python 数组元素相乘 【20211115】【Python】Python中列表、矩阵元素相乘及矩阵乘法

【20211115】【Python】Python中列表、矩阵元素相乘及矩阵乘法

2023-08-18 21:47| 来源: 网络整理| 查看: 265

1. 列表元素相乘

        使用 * 或者 np.multiply() 可实现对应元素相乘

import numpy as np a = [2, 2, 2, 2, 5] b = 2 print(np.multiply(a, b)) print(np.multiply(a, a)) print(np.array(a)*np.array(a)) print(a*a) # 会报错!因为 * 实现对应元素相乘,只适用于 np.array 类型

2. 矩阵元素相乘

        使用 np.multiply() 可实现对应矩阵对应元素相乘

import numpy as np b = [[1, 2, 3, 4, 5], [3, 2, 1, 0, 5]] c = [[1, 1, 1, 1, 2], [2, 2, 2, 2, 0]] print(np.multiply(b, c)) print(np.array(b)*np.array(c))

3. 矩阵乘法

        使用 .dot 实现矩阵乘法!(要注意行数和列数之间的的对应!)

import numpy as np b = [[1, 2, 3], [3, 2, 1]] # 2*3 c = [[1, 1], [2, 2], [3, 3]] # 3*2 print(np.dot(b, c))

        (参考:Python中乘法)

        (参考:Python 实现两个列表里元素对应相乘的方法)

        (参考:Python中的几种矩阵乘法(转))

补充工作中踩的坑:

        根据多元高斯模型的概率公式计算概率密度时,涉及到矩阵的点乘,在 Python 中我使用了 *。明显地,矩阵的行数/列数没有对应上,但Python 没有报错。

        经排查,是因为计算的是元素乘法而不是矩阵点乘。改成 np.dot() 之后,计算正确!

# 计算每个样本的多元高斯分布的 pdf N = dataset.values.shape[1] a = (2 * math.pi) ** (N / 2) b = (np.linalg.det(Sigma)) ** (1/2) c = np.linalg.inv(Sigma) tmp = dataset.values pdf = [] for x in tmp: aa = 1 / (a * b) bb = np.dot(x - mu, c) # 这才是矩阵点乘!!! cc = np.dot(bb, (x - mu).T) # 这才是矩阵点乘!!! dd = aa * math.exp(-1/2 * cc) # bb = -1 / 2 * (x - mu) * c * (x - mu).T # 这不是矩阵乘法!!! pdf.append(dd)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有